Data storage systems are repositories for storing large quantities of data. For instance, many commercial databases and applications store their data in these data storage systems, such as, a disk array system containing multiple physical disk drives. The disk array system is logically separated into many units used for storing data.
To maximize the use of the data storage system, data is first compressed by the data storage system, independently of the application storing the data. That is, the compression is performed without regard to the type or importance of the data being stored. In some cases, the data may be compressed as much as fifty percent, thereby doubling the capacity of the data storage system. As such, instead of storing data in its original form, the data is first compressed using any number of compression algorithms, and then stored in its compressed form. Upon retrieval of the data, a decompression algorithm procedure is performed to return the data into its original form that is recognized by the requestor and/or application storing the data.
There are certain conditions in which the data need not be compressed. However, the data storage system is unable to recognize these conditions, and by default runs that requested data through compression before it is stored. For example, a file may be already compressed by the application requesting storage of the file. Though the file has been compressed upon submission for storing, the data storage system automatically performs its own compression procedure on the file, thereby further compressing the file even further. Many times, performing additional compression actually increases the size of the file, which actually goes away from the objective of compressing the submitted data to maximize the usage of the storage system. In addition, performing multiple compression processes on the file may actually corrupt the file to the point that the information contained in the file is permanently damaged.
In other cases, the data being stored may require high performance levels when storing and accessing that data within the data storage system. For instance, the application storing the data may require real time performance in terms of storing and accessing the data to and from the data storage system. As an example, an application monitoring the movements of the various financial markets depending on the trades made by one or more of its clients requires real time use of its information. However, performance of the application suffers when the data storage system interlaces a default compression step when storing data, and then a necessary decompression step when accessing and delivering the data.